package com.sicpa.system.mapper;

import com.sicpa.common.core.domain.entity.AntiCounterfeitingRegisteredOffice;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * AntiCounterfeitingRegisteredOfficeMapper
 *
 * @author lwf
 */
public interface AntiCounterfeitingRegisteredOfficeMapper {

    int deleteByPrimaryKey(Long officeId);

    int insertSelective(AntiCounterfeitingRegisteredOffice record);

    AntiCounterfeitingRegisteredOffice selectByPrimaryKey(Long officeId);

    int updateByPrimaryKeySelective(AntiCounterfeitingRegisteredOffice record);

    int updateAduitStatusByOfficeId(@Param("officeId") Long officeId,@Param("status") Integer status,@Param("firmStatus") String firmStatus,@Param("aduitStatus") Integer aduitStatus,@Param("effectTime") LocalDate effectTime);
    /**
     * 查询事务所列表
     *
     * @param record
     * @return
     */
    List<AntiCounterfeitingRegisteredOffice> selectOfficeList(AntiCounterfeitingRegisteredOffice record);

    /**
     * 业务报表查询事务所
     * @param firmNameQuery
     * @return
     */
    List<AntiCounterfeitingRegisteredOffice> selectReportOffice(HashMap<String,Object> firmNameQuery);
    /**
     * 业务报表查询事务所 根据数量排序
     * @param firmNameQuery
     * @return
     */
    List<AntiCounterfeitingRegisteredOffice> selectReportOfficeOrderByNum(HashMap<String,Object> firmNameQuery);
    /**
     * 修改事务所联系人
     *
     * @param officeId
     * @param contacts
     * @param contactNumber
     * @param phoneNumberOfContactPerson
     */
    void updateContracts(@Param("officeId") Long officeId, @Param("contacts") String contacts, @Param("contactNumber") String contactNumber, @Param("phoneNumberOfContactPerson") String phoneNumberOfContactPerson);

    /**
     * 根据事务所编号查询
     *
     * @param practiceCertificateNo
     * @return
     */
    List<AntiCounterfeitingRegisteredOffice> selectByPracticeCertificateNo(@Param("practiceCertificateNo") String practiceCertificateNo);

    /**
     * 根据事务所id查询
     *
     * @param officeId
     * @return
     */
    AntiCounterfeitingRegisteredOffice selectByOfficeId(@Param("officeId") Long officeId);


    /**
     * 根据事务所编号统计数量
     *
     * @param practiceCertificateNo
     * @return
     */
    Integer selectCountByPracticeCertificateNo(@Param("practiceCertificateNo") String practiceCertificateNo);

    /**
     * 根据事务所编号更新事务所
     *
     * @param record
     */
    int updateOfficeByOfficeNum(AntiCounterfeitingRegisteredOffice record);

    /**
     * 根据事务所执业证书编号更新事务所
     *
     * @param record
     */
    void updateOfficeByPracticeCertificateNo(AntiCounterfeitingRegisteredOffice record);

    /**
     * 查询事务所编号,名称
     *
     * @param office
     * @return
     */
    List<Map<String, Object>> selectNumberName(AntiCounterfeitingRegisteredOffice office);

    /**
     * 根据事务所ID和权限ID去中间表查询是否有对应权限
     *
     * @param officeId 事务所ID
     * @param menuId   权限ID
     * @return
     */
    Long selectJurisdiction(@Param("officeId") Long officeId, @Param("menuId") Long menuId);

    /**
     * 根据事务所id查询事务所权限
     * @param officeId
     * @return
     */
    List<Long> selectMenuIdsByOfficeId(@Param("officeId") Long officeId);

    /**
     * 批量删除事务所,状态为3, 未启用的可以删除,其他的不能删除
     *
     * @param officeIds
     * @return
     */
    int deleteOffices(Long[] officeIds);

    /**
     * 修改事务所状态,状态为1的修改为2,状态为2的修改为1
     *
     * @param officeId 事务所id
     * @param status   状态id
     */
    int updateStatus(@Param("officeId") Long officeId, @Param("status") int status);

    /**
     * 查询事务所审核列表
     *
     * @param firmName              事务所名称
     * @param practiceCertificateNo 事务所执业证书编号
     * @return TableDataInfo 待审核事务所列表
     * @author wph 20200909
     */
    List<Map<String, Object>> selectListAudit(@Param("firmName") String firmName, @Param("practiceCertificateNo") String practiceCertificateNo, @Param("auditStatus") Integer auditStatus);

    /**
     * 修改审核信息
     *
     * @param office 事务所实体类
     * @author wph 20200909
     */
    int updateAudit(AntiCounterfeitingRegisteredOffice office);

    /**
     * 根据事务所id 删除事务所权限
     *
     * @param officeId
     */
    void deletePowersByOfficeId(@Param("officeId") Long officeId);

    /**
     * 批量新增事务所权限
     *
     * @param officeId
     * @param menus
     */
    void batchOfficePowers(@Param("officeId") Long officeId, @Param("menus") List<Long> menus);

    /**
     * 根据事务所id查询事务所编号（分所） ,暂时弃用
     *
     * @param officeId 事务所id
     * @return office_number 事务所编号(分所)
     */
    String selectOfficeNumberByOfficeId(@Param("officeId") Long officeId);

    /**
     * wym，根据事务所id查询事务所执业证书编号
     *
     * @param officeId 事务所id
     * @return office_number 事务所编号(分所)
     */
    String selectOfficePracticeCertificateNoByOfficeId(@Param("officeId") Long officeId);

    /**
     * 根据事务所ID 获取审核事务所详情
     *
     * @param officeId 事务所id
     * @return
     */
    AntiCounterfeitingRegisteredOffice getDetailById(@Param("officeId") Long officeId);

    /**
     * 事务所编号 获取审核事务所详情
     *
     * @param officeId
     * @return
     */
    AntiCounterfeitingRegisteredOffice getDetailByNumber(@Param("officeId") Long officeId);

    /**
     * 根据事务所名称查询事务所证书编号
     *
     * @param firmName
     * @return
     */
    String selectPracticeCertificateNoByFriName(@Param("firmName") String firmName);

    /**
     * 查询用户管理的事务所列表
     *
     * @param tempMap 事务所名称/事务所执业证书编号/该用户所管理事务所id集合
     * @return 结果
     * @author wph 20200914
     */
    List<AntiCounterfeitingRegisteredOffice> selectOfficeDetail(HashMap<String, Object> tempMap);

    /**
     * 查询用户未管理事务所列表
     *
     * @param tempMap 事务所名称/事务所执业证书编号/已分配事务所
     * @return 结果
     * @author wph 20200914
     */
    List<AntiCounterfeitingRegisteredOffice> getNotListOffice(HashMap<String, Object> tempMap);

    /**
     * 新增用户管理事务所
     *
     * @param officeId 事务所id
     * @param userId   用户id
     * @author wph 20200914
     */
    int insertUserOffice(@Param("list") List<Long> officeId, @Param("userId") Long userId);

    /**
     * 查询事务所列表
     *
     * @author wph 20200914
     */
    List<AntiCounterfeitingRegisteredOffice> getAllListOffice(@Param("firmName") String firmName, @Param("practiceCertificateNo") String practiceCertificateNo);

    /**
     * 根据事务所名称查询事务所
     *
     * @param firmName
     * @return
     */
    AntiCounterfeitingRegisteredOffice selectOfficeByFriName(@Param("firmName") String firmName);

    /**
     * 根据事务所编号查询事务所
     *
     * @param practiceCertificateNo
     * @return
     */
    AntiCounterfeitingRegisteredOffice selectOfficeByPracticeCertificateNo(@Param("practiceCertificateNo") String practiceCertificateNo);

    /**
     * 根据用户id获取关联的事务所id列表
     *
     * @param userId
     * @return
     */
    List<String> selectOfficeIdList(Long userId);

    /**
     * 根据officeId获取事务所列表
     *
     * @param list
     * @return
     */
    List<AntiCounterfeitingRegisteredOffice> selectOfficeByOfficeId(@Param("list") List<String> list, @Param("office") AntiCounterfeitingRegisteredOffice office);

    /**
     * 查询待审核事务所列表
     *
     * @param firmName
     * @param practiceCertificateNo
     * @param auditStatus
     * @return
     */
    List<Map<String, Object>> selectListAuditByOfficeNumber(@Param("officeNumber") String officeNumber, @Param("firmName") String firmName, @Param("practiceCertificateNo") String practiceCertificateNo, @Param("auditStatus") Integer auditStatus);

    /**
     * 根据officeId列表审核事务所
     *
     * @param list
     * @param firmName
     * @param practiceCertificateNo
     * @param auditStatus
     * @return
     */
    List<Map<String, Object>> selectListAuditByOfficeId(@Param("list") List<String> list, @Param("firmName") String firmName, @Param("practiceCertificateNo") String practiceCertificateNo, @Param("auditStatus") Integer auditStatus);

    /**
     * 根据事务所编号查询事务所列表
     *
     * @param practiceCertificateNo
     * @param office
     * @return
     */
    List<Map<String, Object>> selectNumberNamebyOfficeNumber(@Param("practiceCertificateNo") String practiceCertificateNo, @Param("office") AntiCounterfeitingRegisteredOffice office);

    /**
     * 根据事务所名称查询事务所id
     *
     * @param firmName
     * @return
     */
    Long selectOfficeIdByFirmName(@Param("firmName") String firmName);

    /**
     * 根据事务所id查询事务所列表
     *
     * @param list
     * @param office
     * @return
     */
    List<Map<String, Object>> selectNumberNameByOfficeId(@Param("list") List<String> list, @Param("office") AntiCounterfeitingRegisteredOffice office);

    /**
     * 根据事务所编号查询是否为外省市注册
     *
     * @param username 用户姓名也为事务所编号
     * @return
     * @author wph 20200923
     */
    AntiCounterfeitingRegisteredOffice selectIsRegisterByOfficeNumber(@Param("username") String username);

    /**
     * 修改事务所状态
     * @param officeId
     * @param firmStatus
     */
    void updateFirmStatusByOfficeId(@Param("officeId") Long officeId,@Param("firmStatus") String firmStatus);

    /**
     * 根据事务所名称及事务所编号查询
     * @param firmName
     * @return
     */
    int selectByFirmNameOrOfficeNumber(@Param("firmName")String firmName);
}
